Local area networks use a network cable or other media to link stations on the network. Each local area network architecture uses a media access control (MAC) enabling network interface cards at each station to share access to the media.
The Ethernet protocol ISO/IEC 8802-3 (ANSI/IEEE Std. 802.3, 1993 edition) defines a half-duplex media access mechanism that permits all stations to access the network channel with equality. Traffic is not distinguished or prioritized over the medium. Each station includes an Ethernet interface card that uses carrier-sense multiple-access with collision detection (CSMA/CD) to listen for traffic on the media. The absence of network traffic is detected by sensing a deassertion of a receive carrier on the media.
Any station having data to send will attempt to access the channel by waiting a predetermined time after the deassertion of a receive carrier on the media, known as the interpacket gap (IPG) interval. If a plurality of stations have data to send on the network, each of the stations will attempt to transmit in response to the sensed deassertion of the receive carrier on the media and after the IPG interval, resulting in a collision. Hence, a transmitting station will monitor the media to determine if there has been a collision due to another station sending data at the same time. If a collision is detected, both stations stop, wait a random amount of time, and retry transmission.
Network stations generally do not have knowledge of the status of other stations on the network. If there is no collision, a transmitting station will transmit the data packet regardless of the state of the receiving station. If the receiving station is in a state of congestion, for example due to a lack of buffer space, the receiving station will discard the transmitted packet, resulting in a loss of data. If upper layer protocol requires the data to be resent, the sending station will resend the data packet, reducing the network throughput.
A full duplex environment has been proposed for Ethernet networks, referred to as IEEE 802.3x, Full Duplex with Flow Control-Working Draft (0.3). The full duplex environment provides a two-way, point-to-point communication link between two network elements, for example a network station and a switched hub. Hence, two or more stations can simultaneously transmit and receive Ethernet data packets between each other via a switched hub without collisions.
Network congestion occurs if a receiving network element is unable to receive data at a rate greater than or equal to the transmission rate of the transmitting element. For example, traffic in a client-server environment is dominated by client requests followed by a burst of frames from the server to the requesting client. Although the full duplex environment enables the server to transmit packets while receiving requests from other clients, only a limited number of client requests can be output to the server from the switched hub at the assigned switching port. If the number of client requests exceeds the capacity of the server's port, some of the data packets will be lost. Alternatively, a client having limited buffer space may be unable to keep up with the transmission rate of the server, resulting in lost packets.
Flow control has been proposed to reduce network congestion, where a sending station temporarily suspends transmission of data packets. A proposed flow control arrangement for a full duplex environment, referred to as IEEE 802.3x2!, specifies generation of a flow control message, for example a PAUSE frame. A transmitting station that receives the PAUSE frame enters a pause state in which no frames are sent on the network for a time interval specified in the PAUSE frame.
Another proposed flow control arrangement for a half duplex environment, referred to as "backpressure", causes a receiving station to force a collision with the transmitting station when the receive buffer of the receiving station reaches a "receive buffer unavailable" state.
The disclosed flow control proposals, however, assume that flow control should be initiated when a receive buffer is full, which still results in a loss of data. Moreover, the existing proposals do not describe how to determine the duration of the flow control. If the flow control duration is too short, a receiving station may still lose portions of the transmitted data. If the duration is too long, the transmitting station remains idle, reducing network throughput.